package com.mjf.scala.chapter05

/**
 * 高阶函数之函数可以作为参数进行传递  --- 匿名函数
 * -扩展函数的功能
 * -提高函数的灵敏度
 *
 * 格式：(x:Int)=>{函数体}
 * 说明：x：表示输入参数类型；Int：表示输入参数类型；函数体：表示具体代码逻辑
 */
object Scala05_TestFunNon {

  def main(args: Array[String]): Unit = {

    // 需求：提供一个函数，对数组中的元素进行处理，处理完毕之后返回一个新的数组   目前处理方式：元素 + 1
    // 创建数组对象
    val arr: Array[Int] = Array(1, 2, 3, 4)

    def operationArray(arr: Array[Int], op: Int => Int): Array[Int] = {
      // 遍历数组中的元素
      for (a <- arr) yield op(a)
    }

    def op(a:Int) = a + 1;

    // 调用函数，实现+1功能
    val newArray: Array[Int] = operationArray(arr, op)
    // mkString：用指定的字符串连接数组中的元素，形成一个新的字符串
    println(newArray.mkString(","))

    // 通过匿名函数调用，对数组元素 * 3
//    println(operationArray(arr, (a: Int) => a * 3).mkString(","))
    println(operationArray(arr, _ * 3).mkString(","))

  }

}
